package ControleAcademico.Model.Dao;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import ControleAcademico.Model.Pojo.Atividade;
import ControleAcademico.Model.Pojo.Disciplina;
import ControleAcademico.Model.Pojo.Faltas;
import ControleAcademico.Model.Pojo.Professor;
import ControleAcademico.Model.Pojo.Turma;

public class TurmaImpl implements TurmaDao{
		
	private ArrayList<Turma> listaDeTurmas;
	private ProfessorImpl professorImpl;
	private AtividadeImpl atividadeImpl;
	private FaltasImpl faltasImpl;
	private DisciplinaImpl disciplinaImpl;
	
	public TurmaImpl() {
		this.listaDeTurmas = new ArrayList<Turma>();
	}
	
	@Override
	public void salvar (Turma turma,int flag) {
		try {
			
			if (flag != -1) {
				listaDeTurmas.add(turma);		
			} else {
				
				PrintWriter p = new PrintWriter("Turmas.txt");
				for(Turma i : listaDeTurmas){
					p.write(i.getId()+"\t");
					p.write(i.getPeriodo()+"\t");
					p.write(i.getLocal()+"\t");
					p.write(i.getHorario()+"\t");
					p.write(i.getNumeroVagas()+"\t");
					p.write(i.getSomaDeNotas()+"\t");
					p.write ("Disciplina\t");
					p.write(i.getDisciplina().getId()+"\t");
					p.write ("Professores\t");
	
					for(Professor j : i.getProfessor()){
						p.write(j.getId()+"\t");
					}
					
					p.write ("Atividades\t");
	
					for(Atividade j : turma.getAtividades()){
						p.write(j.getId()+"\t");
					}
			
					p.write ("Faltas\t");
	
					for(Faltas j : turma.getFaltas()){
						p.write(j.getId()+"\t");
					}
					p.write("#");
					p.write("\n");
				  }
				p.close();
			}
		  } catch (Exception e){

		  }
		}
	
	public ArrayList<Turma> getTurmas(){
		return listaDeTurmas;
	}

	public Turma pesquisarArquivo(int id){
		String linha;
		Turma turma = null;
		try{
			FileReader reader = new FileReader("Turmas.txt");    	
	        BufferedReader leitor = new BufferedReader(reader);
	        
	        while ((linha = leitor.readLine()) != null) {
	        	String[] dados = linha.split("\t");
	        	if(dados[0].equals(id+"")){
	        		
	        		turma = new Turma(Integer.parseInt(dados[1]), Integer.parseInt(dados[2]), 
	        						  Integer.parseInt(dados[3]), dados[4], dados[5], 
	        						  Integer.parseInt(dados[6]), Integer.parseInt(dados[0]));
	        		return turma;
	        	}
	        }
		}catch(Exception e){
			
		}
		
        return turma;
		
	}
	
	
	
	@Override
	public void carregar() {
		
	      String linha = null; 
	      
	      try {  
	    	 FileReader reader = new FileReader("Turmas.txt");    	
	         BufferedReader leitor = new BufferedReader(reader);  
	         Turma turma = null;
	         Professor professor = null;
	         Atividade atividade = null;
	         Faltas faltas = null;
	         Disciplina disciplina = null;

	         while ((linha = leitor.readLine()) != null) {  
	            String[] dados = linha.split("\t"); 
	            int identificador = Integer.parseInt(dados[0]);

	            if (!this.pesquisarNaListaImpl(Integer.parseInt(dados[0]))){
	            	turma = new Turma (Integer.parseInt(dados[1]), Integer.parseInt(dados[2]), Integer.parseInt(dados[3]), dados[4],
	  	  				  dados[5], Integer.parseInt(dados[6]),Integer.parseInt(dados[0]));
	            	disciplina = disciplinaImpl.pesquisarDisciplina(Integer.parseInt(dados[9]));
	            	System.out.println("arq>"+disciplina);
		            turma.setDisciplina(disciplina);
		            turma.setSomaDeNotas(Double.parseDouble(dados[7]));
		            
		            int i = 10;
		            
		            while (!(dados[i].equals("Atividades"))) { 
		            	professor = professorImpl.pesquisarProfessor(Integer.parseInt(dados[i]));
		            	turma.setProfessor(professor);
		            	i++;
		            }
		            i++;
		            
		            while (!(dados[i].equals("Faltas"))) { 
		            	atividade = atividadeImpl.pesquisarAtividade(Integer.parseInt(dados[i]));
		            	turma.adicionarAtividade(atividade);
		            	i++;
		            }
		            i++;
		            
		            while (!(dados[i].equals("#"))) { 
		            	faltas = faltasImpl.pesquisarFaltas(Integer.parseInt(dados[i]));
		            	turma.adicionarFaltas(faltas);
		            	i++;
		            }
		            listaDeTurmas.add(turma); 
	            }else{
	            	
	            	for (Turma k : listaDeTurmas) {
						if (k.getId() == identificador){
							turma = k;
						}
					}

	            	disciplina = disciplinaImpl.pesquisarDisciplina(Integer.parseInt(dados[8]));
		            turma.setDisciplina(disciplina);
		            turma.setSomaDeNotas(Double.parseDouble(dados[7]));
		            int i = 10;
		            
		            while (!(dados[i].equals("Atividades"))) { 
		            	professor = professorImpl.pesquisarProfessor(Integer.parseInt(dados[i]));
		            	turma.setProfessor(professor);
		            	i++;
		            }
		            i++;
		            
		            while (!(dados[i].equals("Faltas"))) { 
		            	atividade = atividadeImpl.pesquisarAtividade(Integer.parseInt(dados[i]));
		            	turma.adicionarAtividade(atividade);
		            	i++;
		            }
		            i++;
		            
		            while (!(dados[i].equals("#"))) { 
		            	faltas = faltasImpl.pesquisarFaltas(Integer.parseInt(dados[i]));
		            	turma.adicionarFaltas(faltas);
		            	i++;
		            }
	            }
	         }  
	         leitor.close();  
	         reader.close();  
	      } catch (Exception e) { 

	      }  
	  }
	
	public void adicionarTurma (Turma turma){
		listaDeTurmas.add(turma);
	}

	public void setProfessorImpl(ProfessorImpl professorImpl) {
		this.professorImpl = professorImpl;
	}

	public void setAtividadeImpl(AtividadeImpl atividadeImpl) {
		this.atividadeImpl = atividadeImpl;
	}

	public void setFaltasImpl(FaltasImpl faltasImpl) {
		this.faltasImpl = faltasImpl;
	}
	
	public void setDisciplina(DisciplinaImpl disciplinaImpl) {
		this.disciplinaImpl = disciplinaImpl;
	}
	
	public boolean pesquisarNaListaImpl(int id){
		
		for (Turma turma: listaDeTurmas) {
			if (turma.getId() == id){
				return true;		
			}
		}
		return false;
	}
}

